package com.plant.pay.service.impl;


import com.github.wxpay.sdk.WXPay;
import com.plant.pay.config.PayConfig;
import com.plant.pay.service.WxPayService;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class WxPayServiceImpl implements WxPayService {

    /**
     *  下单操作
     * @param body 商品描述
     * @param outTradeNo 订单号
     * @param money 订单金额
     * @return
     */
    @Override
    public Map<String, String> createNative(String body, String outTradeNo, String money) {
        //定义返回值
        Map<String, String> resultMap = null;
        //创建微信支付对象
        PayConfig payConfig = new PayConfig();
        WXPay wxPay = new WXPay(payConfig);
        //封装请求参数
        Map<String, String> reqData = new HashMap<>();
        reqData.put("out_trade_no", outTradeNo);    //订单号
        reqData.put("total_fee", money);            //订单金额(单位分)
        reqData.put("body", body);             		//商品描述
        reqData.put("fee_type", "CNY");             //货币类型, CNY人民币
        reqData.put("spbill_create_ip", "127.0.0.1");   //终端IP(用户的客户端IP)
        reqData.put("notify_url", "http://www.example.com/wxpay/notify");   //支付成功后,通知的地址
        reqData.put("trade_type", "NATIVE");         // 支付类型,此处指定为扫码支付
        reqData.put("product_id", outTradeNo);         //商品ID,trade_type=NATIVE时，此参数必传。
        try {
            //把信息发送给微信
            resultMap = wxPay.unifiedOrder(reqData);
            System.out.println(resultMap);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultMap;
    }

    /**
     * 查询订单状态(支付了没有)
     * @param outTradeNo 订单号
     * @return
     */
    @Override
    public Map<String, String> queryNative(String outTradeNo) {
        PayConfig config = new PayConfig();
        WXPay wxpay = new WXPay(config);

        Map<String, String> data = new HashMap<String, String>();
        data.put("out_trade_no", outTradeNo);

        try {
            Map<String, String> resp = wxpay.orderQuery(data);
            System.out.println(resp);
            return resp;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 取消订单
     * @param outTradeNo 订单号
     * @return
     */
    @Override
    public Map<String, String> closeNative(String outTradeNo) {
        PayConfig config = new PayConfig();
        WXPay wxpay = new WXPay(config);

        Map<String, String> data = new HashMap<String, String>();
        data.put("out_trade_no", outTradeNo);

        try {
            Map<String, String> resp = wxpay.closeOrder(data);
            System.out.println(resp);
            return resp;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
